package com.conferences.web.model;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.conferences.model.Conference;
import com.conferences.model.User;

public class Mailer {

	public void sendEmail(Conference c, List<User> users) {
		Properties props = new Properties();
		props.put("mail.smtp.host", "smtp.gmail.com");
		props.put("mail.smtp.socketFactory.port", "465");
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.port", "465");

		Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("tomasz.eprawojazdy@gmail.com", "");
			}
		});

		try {

			SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
			for (User user : users) {

				if (user.getId().compareTo(c.getAuthor().getId()) == 0) {
					continue;
				}

				MimeMessage message = new MimeMessage(session);
				message.setFrom(new InternetAddress("tomasz.eprawojazdy@gmail.com"));
				message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(user.getEmail()));
				message.setSubject("Konferencje - przypomnienie");

				message.setText("Witaj " + user.getFirstname() + " " + user.getLastname() + "," + "\n\n Użytkownik "
						+ c.getAuthor().getFirstname() + " " + c.getAuthor().getLastname()
						+ " wysłał ci przypomnienie z portalu Konferencje dotyczące zbliżającego się wydarzenia : \n\n" + "<h2>"
						+ c.getSubject() + "</h2>\n Wydarzenie rozpoczyna się dnia : " + sdf.format(c.getDate())
						+ " \n\n<br/><br/>Pozdrawiamy <br/> <small><span tyle='font-color:grey'>Zespół Konferencje</span></small>", "utf-8", "html");
				Transport.send(message);

			}
		} catch (MessagingException e) {
			throw new RuntimeException(e);
		}
	}

}
